package com.daikun.common.aop.annos;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * 对指定方法进行加锁
 * 方法必须必须是 controller 中的方法，并且被 @requestMapping 注解的方法，否则不生效
 * 标注此注解的方法，会自定进行加锁、释放锁
 * @author earl created 2025-07-10
 * @version init 0.0.1
 */
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface BaseLock {

    /** key 的前缀，会自动拼接参数中 keyName 字段的数据，拼接格式为 value:keyName */
    String value();

    /** 从参数中获取当前 key 的内容，拼接到 value 后面，若找不到，则直接返回 */
    String keyName() default "uuid";

    /** 尝试获取锁的等待时长，超过这个时间还获取不到，直接返回获取失败 */
    int waitTime() default 1;

    /** 获取锁后，持有多长时间，超过这个时间，自动释放锁 */
    int holdTime() default 30;

    /** 获取锁时所有时间相关的单位 */
    TimeUnit unit() default TimeUnit.SECONDS;

}
